1. rmarkdwonknitr을 사용한 R 마크다운 문서 작성

(1) 개관

  • 마크다운(markdwon)
    • 정의: 문서 생성 및 formatting을 위한 마크업(markup) 언어.
    • rmarkdown 패키지
      • 텍스트, R 코드, R 코드 결과물을 통합하여 다양한 형식([EX] HTML, MS 워드, PDF 등)의 문서로 만들어줌.
      • R 마크다운 문서(R markdown document, 이하 Rmd)
        • R 스크립트보다 훨씬 가독성이 높고, 다양한 정보를 포함할 수 있음.
        • YAML 메타데이터/제목, 텍스트, 코드 덩이(code chunk)로 구성됨.

[그림 1] R을 통해 생성할 수 있는 다양한 문서 결과물의 형태

  • R 마크다운의 장점
    • 재현가능성(reproducible): 독립적 연구자가 새로운 데이터로 동일한 절차를 사용하여 동일한 결과를 재생성할 수 있도록 하는 데 충분한 정보(데이터와 코드)를 제공할 수 있다면, 해당 연구결과는 재현가능하다고 간주할 수 있음.
    • 협업 가능성(collaborative): 동료들과 연구(데이터와 코드)를 공유하고 함께 수행 가능.
    • 효율성(efficient): 출력을 자동적으로 생성하고 업데이트할 수 있음([EX] HTML, MS 워드, PDF 등).

[그림 2] R 마크다운 가이드

  • 출처: https://www.rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf

  • knitr 패키지

    • 마크다운 문법에 바탕을 둔 R 마크다운 문서가 완성되면, 해당 문서는 knitr 패키지를 통해 렌더링(rendering)됨.
    • R 코드 입력, R 코드 출력, 플롯, 경고문, 메시지, 에러 등을 문서에 모두 나타낼 수 있음.
    • 다양한 옵션을 통해 그래픽을 융통성 있게 제시 가능: 플롯의 너비와 높이, 위치, 출력 개수 등.
    • 문서생성 절차(render 함수의 기능)
      1. Rmd 파일 \(\rightarrow\) knitr리 코드 덩이를 실행하고 새로운 마크다운(.md) 문서를 생성.
      2. md 파일 \(\rightarrow\) pandoc이라는 최종 포맷을 생성하는 프로그램의 처리를 거침.
      3. 지정된 포맷([EX] HTML, PDF, MS Word) 문서 출력.

[그림 3] 렌더링을 통해 R 마크다운(Rmd) 파일을 HTML 문서로 변환하기

[그림 4] Rmd 렌더링 흐름도

(2) 주요 패키지 및 소프트웨어 설치하기

# R 마크다운 관련 패키지 설치하기.
package.vec <- c("lubridate",
                 "knitr", "rmarkdown", "markdown", "bookdown", "caTools", "bitops"
                 )
install.packages(package.vec)
  • PDF 문서 렌더링을 하려면 LaTeX 프로그램이 설치되어 있어야 함.
    • 윈도우 설치: miktex.
    • 패키지 설치: tinytex::install_tinytex().

(3) R 마크다운 문서(Rmd) 생성

  • 문서유형: HTML, PDF, MS Word.
  • 템플릿
    • R 제공 템플릿.
    • 커스텀 템플릿.

[그림 5] Rmd 템플릿 선택하기

(4) 기본 문법

A. 제목 텍스트

  • 해시태그 #를 하나씩 덧붙일 때마다 수준이 내려감.
  • # 제목 1, ## 제목 2, ## 제목 3…

B. 단순 텍스트

  • 단순 텍스트: YAML 제목 밑에 텍스트를 써서 붙이면 됨. 새로운 단락을 시작하려면 줄바꿈을 하거나, 텍스트 라인 뒤에 스페이스를 2개 두면 됨.

C. 볼드체와 이탤릭체

  • 볼드
    • 텍스트 양쪽에 별표(*)를 두 개 붙임.
    • 텍스트 양쪽에 언더바(_)를 두 개 붙임.
  • 이탤릭체
    • 텍스트 양쪽에 별표(*)를 한 개 붙임.
    • 텍스트 양쪽에 언더바(_)를 한 개 붙임.

[그림 6] 볼드체와 이탤릭체 적용하기

D. 리스트

  • 순서를 매기지 않은 리스트
    • 별표 하나(*) & 스페이스 뒤에 텍스트를 붙이면 됨.
    • 하위 목록은 탭 1개 또는 스페이스 2개 & 더하기(+) 또는 빼기(-) 기호 & 스페이스 뒤에 텍스트를 붙이면 됨.

[그림 7] 순서를 매기지 않은 리스트 적용하기

  • 순서를 매긴 리스트
    • 숫자 & 마침표(.) & 스페이스 뒤에 텍스트를 붙이면 됨.
    • 숫자를 매기지 않은 하위 목록을 추가하려면, 탭 1개 또는 스페이스 2개 & 더하기(+) 또는 빼기(-) 기호 & 스페이스 뒤에 텍스트를 붙이면 됨.

[그림 7] 순서를 매기지 않은 리스트 적용하기

E. 문서 내 섹션 링크

  • 문서 내 섹션으로 가는 링크를 만들려면 사각괄호([]) 안에 섹션의 이름을 넣으면 됨. 링크를 클릭하면 해당 섹션으로 가게 됨.

[1.rmarkdwon과 knitr을 사용한 R 마크다운 문서 작성]

[1. rmarkdwon과 knitr을 사용한 R 마크다운 문서 작성]

F. 하이퍼링크

  • URL을 그대로 복붙하기.
  • 링크를 텍스트 안에 숨기려면 사각괄호([]) 안에 텍스트를 넣고, 둥근 괄호() 안에 URL을 넣으면 됨.

[수업자료 깃허브 저장소](https://github.com/cognitivepsychology/data_science_for_psycholinguistics)

수업자료 깃허브 저장소

G. 이미지 삽입

  • 느낌표(!) 뒤에 사각괄호를 붙인 뒤 [] 둥근 괄호() 안에 이미지 파일 경로를 넣으면 됨.

![](images/week12/rmarkdown.png)

[그림 8] rmarkdown 패키지 심볼 이미지

![이미지용 캡션](images/week12/rmarkdown.png)

[그림 9] rmarkdown 패키지 심볼 이미지에 캡션 달기

이미지용 캡션

![이미지용 캡션](images/week12/rmarkdown.png){width=100px}

[그림 11] rmarkdown 패키지 심볼 이미지에 사이즈 설정하기

이미지용 캡션

<center> ![이미지용 캡션](images/week12/rmarkdown.png){width=100px} </center>

[그림 12] rmarkdown 패키지 심볼 이미지 위치 선정하기

이미지용 캡션

G. 인용

1) 블록 인용(blockquote)

  • 텍스트 앞뒤로 한 행씩 띄운 뒤, > & 스페이스 다음에 인용할 텍스트를 넣으면 됨.

텍스트 블록 인용.

2) 단순 인용

  • 텍스트 앞 뒤로 백팁 세 개(```) 이상을 넣으면 됨.
텍스트 단순 인용.

G. 기타

1) 수학 기호 삽입

  • 문장 밖에 수식을 입력하는 경우: $$를 수식 앞뒤로 붙이기.

\[y=x^2\]

  • 문장 안에 수식을 입력하는 경우: $를 수식 앞뒤로 붙이기.

문장 안에 수식 \(4=2 \times 2\)을 넣기.

2) 글자에 색상 입히기(HTML 문서 한정)

  • <span style="color: 색상명"></span> 사이에 텍스를 넣으면 됨.
[EX] 장미는 <span style="color: red">**빨간색**</span>이고, 제비꽃은 <span style="color: blue">파란색</span>이다.

[EX] 장미는 빨간색이고, 제비꽃은 파란색이다.

(5) YAML 메타데이터

  • YAML(Yet Another Multicolumn Layout)
    • 문서의 맨앞에 배치.
    • 문서의 메타정보([EX 제목(title), 저자(author), 날짜(date), 출력 모수(output) 등을 설정.

A. 문서의 제목

  • title: "내 문서의 제목": 문서 맨 앞에 큰 서체로 내가 설정한 제목이 나오게 됨.
  • subtitle: "내 문서의 하위제목": 문서 맨 앞에 제목보다 작은 서체로 내가 설정한 하위제목이 나오게 됨.

B. 저자

  • author: "내 이름": 제목 밑에 제시.

C. 날짜

  • 고정된 날짜: date: "2022년 5월 23일 화요일": 저자 밑에 제시.
  • 날짜 업데이트: 문서를 렌더링할 때마다 날짜를 수시로 업데이트하고자 할 경우, date: "`\r Sys.Date()`"

D. 목차

  • toc: true로 지정하면 고정된 목차가 생성됨.
  • toc_float: true로 지정하면 유동적 목차가 생성됨.

E. 테마

  • theme: 테마명: 테마 갤러리에서 고를 수 있음.
  • css: 파일명.css: HTML 스타일(서체 유형, 색상, 크기 등) 설정 가능.
  • mainfont: 서체이름: 문서 메인 서체 설정 가능.

F. 코드 접기

  • code_folding: show: 해당 정보를 추가하면 출력 시 코드를 보여줌.
  • code_folding: hide: 해당 정보를 추가하면 출력 시 코드를 가려줌.

G. 출력(output)

  • 출력 관련 논항
    • html_document
    • html_notebook
    • pdf_document
    • word_document
  • Knit 버튼 옵션
    • Knit to HTML
    • Knit to PDF
    • Knit to Word
  • Knit 버튼 옵션 중 하나를 클릭하면 YAML 메타데이터가 자동으로 업데이트됨.
  • 두 가지 이상의 문서 유형을 동시에 렌더링 가능.
    • word_document: default
    • html_document: default
    • pdf_document: default

(6) 코드 덩이

A. 코드 덩이 입력

  • 소스창에서 Ctrl + Alt + I를 누르거나, ```{r} 코드 덩이 ```을 입력하면 코드 덩이를 삽입할 수 있음.

B. 옵션

  • name: {r my_code_chunk_name} 형식으로 설정 가능. 굳이 넣지 않아도 됨.
  • echo: 렌더링 후 코드가 출력문서에 제시됨(default = TRUE).
  • eval: 해당 코드를 실행함(default = TRUE).
  • 이미지 관련 옵션
    • fig.width, fig.height: 해당 코드 덩이를 통해 생성되는 이미지([EX] 플롯, 지도 등)의 사이즈 설정. [EX] fig.width = 10, fig.height = 3
    • fig.align: 이미지의 위치 설정. left, right, center 중 선택. [EX] fig.align = center)
    • fig.cap: 이미지의 캡션 설정. fig.cap = "Iris 데이터셋의 산점도"
```{r,iris_data, fig.width = 10, fig.height = 3, fig.align = "center", fig.cap = "Iris 데이터셋의 산점도", echo=T}
2 + 2
## [1] 4
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.6     v dplyr   1.0.7
## v tidyr   1.1.3     v stringr 1.4.0
## v readr   2.0.1     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
data(iris)
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  geom_point()
Iris 데이터셋의 산점도

Iris 데이터셋의 산점도

```
  • message: 렌더링 후 메시지가 출력문서에 제시됨(default = TRUE).
    • message=T로 설정한 경우
```{r,iris_data_1, echo=T, message=T}
# car 패키지 불러오기.
library(car)
## 필요한 패키지를 로딩중입니다: carData
## 
## 다음의 패키지를 부착합니다: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
```
  • message=F로 설정한 경우
```{r,iris_data_2, echo=T, message=F}
# psych 패키지 불러오기.
library(psych)
```
  • include: 렌더링 시 해당 코드를 실행한 후 문서에 제시함(default = TRUE).
    • include=T로 설정한 경우
```{r,iris_data_3, fig.width = 10, fig.height = 3, fig.align = "right", fig.cap = "Iris 데이터셋의 산점도", echo=T, include=T}
4 + 4
## [1] 8
ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) +
  geom_point()
Iris 데이터셋의 산점도

Iris 데이터셋의 산점도

```
  • include=F로 설정한 경우: 코드와 결과 모두 제시되지 않음.

  • error: 렌더링 후 에러 메시지가 출력문서에 제시됨(default = FALSE).

  • collapse: 출력 블록과 소스 코드 블록 간에 공간을 둠(default = FALSE).

    • collapse=T로 설정한 경우
```{r,math_1, eva=T, echo=T, include=T, collapse=T}
1+1
## [1] 2
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
```
  • collapse=F로 설정한 경우: 출력과 코드가 하나의 블록 안에 제시됨.
```{r,math_2, eva=T, echo=T, include=T, collapse=F}
1+1
## [1] 2
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
```
  • results: 출력을 제시하는 방식 설정(default = markup).
    • asis: 표 결과물 출력.
    • hide: 모든 출력 제시하지 않음.
    • hold: 모든 코드 밑에 출력 제시.
    • FALSE: 텍스트 출력 제시하지 않음.
  • 표 넣기: knitr 패키지의 kable 함수 사용.
```{r,mtcars, eval=T, echo=T, results = "asis"}
knitr::kable(mtcars[, 1:5], caption = "**<표 1> mtcars 데이터셋 표**")
<표 1> mtcars 데이터셋 표
mpg cyl disp hp drat
Mazda RX4 21.0 6 160.0 110 3.90
Mazda RX4 Wag 21.0 6 160.0 110 3.90
Datsun 710 22.8 4 108.0 93 3.85
Hornet 4 Drive 21.4 6 258.0 110 3.08
Hornet Sportabout 18.7 8 360.0 175 3.15
Valiant 18.1 6 225.0 105 2.76
Duster 360 14.3 8 360.0 245 3.21
Merc 240D 24.4 4 146.7 62 3.69
Merc 230 22.8 4 140.8 95 3.92
Merc 280 19.2 6 167.6 123 3.92
Merc 280C 17.8 6 167.6 123 3.92
Merc 450SE 16.4 8 275.8 180 3.07
Merc 450SL 17.3 8 275.8 180 3.07
Merc 450SLC 15.2 8 275.8 180 3.07
Cadillac Fleetwood 10.4 8 472.0 205 2.93
Lincoln Continental 10.4 8 460.0 215 3.00
Chrysler Imperial 14.7 8 440.0 230 3.23
Fiat 128 32.4 4 78.7 66 4.08
Honda Civic 30.4 4 75.7 52 4.93
Toyota Corolla 33.9 4 71.1 65 4.22
Toyota Corona 21.5 4 120.1 97 3.70
Dodge Challenger 15.5 8 318.0 150 2.76
AMC Javelin 15.2 8 304.0 150 3.15
Camaro Z28 13.3 8 350.0 245 3.73
Pontiac Firebird 19.2 8 400.0 175 3.08
Fiat X1-9 27.3 4 79.0 66 4.08
Porsche 914-2 26.0 4 120.3 91 4.43
Lotus Europa 30.4 4 95.1 113 3.77
Ford Pantera L 15.8 8 351.0 264 4.22
Ferrari Dino 19.7 6 145.0 175 3.62
Maserati Bora 15.0 8 301.0 335 3.54
Volvo 142E 21.4 4 121.0 109 4.11
```